উদাহরণ সহ Exception Handling এবং Logging

Java Technologies - স্প্রিং বুট ওআরএম (Spring Boot ORM) - Exception Handling এবং Logging
206

স্প্রিং বুটে Exception Handling এবং Logging দুটি গুরুত্বপূর্ণ বিষয়, যা অ্যাপ্লিকেশন ডেভেলপমেন্টে ব্যবহৃত হয়। Exception Handling অ্যাপ্লিকেশনে যেকোনো ত্রুটি বা ব্যতিক্রম সঠিকভাবে ট্র্যাক এবং হ্যান্ডেল করতে সাহায্য করে, এবং Logging ডেভেলপারদের অ্যাপ্লিকেশন চলাকালে ত্রুটি বা অন্যান্য গুরুত্বপূর্ণ তথ্য লগ করার জন্য সহায়ক।


Exception Handling in Spring Boot

Spring Boot-এ Exception Handling বেশ সহজ এবং কাস্টমাইজ করা যায়। Spring Framework-এ বিভিন্ন ধরনের exception handling এর উপায় রয়েছে, যার মধ্যে @ControllerAdvice, @ExceptionHandler, এবং ResponseEntityExceptionHandler ব্যবহার করা হয়।

১. @ExceptionHandler এনোটেশন

Spring MVC-তে @ExceptionHandler ব্যবহার করা হয় নির্দিষ্ট ধরনের exception হ্যান্ডেল করতে। এটি নির্দিষ্ট controller বা ক্লাসের মধ্যে ব্যবহৃত হয়।

উদাহরণ:

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;

@ControllerAdvice
@RestController
public class GlobalExceptionHandler {

    @ExceptionHandler(ResourceNotFoundException.class)
    @ResponseStatus(HttpStatus.NOT_FOUND)
    public String handleResourceNotFound(ResourceNotFoundException ex) {
        return ex.getMessage();
    }

    @ExceptionHandler(Exception.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    public String handleGeneralException(Exception ex) {
        return "An error occurred: " + ex.getMessage();
    }
}

ব্যাখ্যা:

  • @ExceptionHandler(ResourceNotFoundException.class) ব্যবহার করা হয়েছে ResourceNotFoundException এর ক্ষেত্রে কাস্টম exception হ্যান্ডেল করতে।
  • @ResponseStatus(HttpStatus.NOT_FOUND) দিয়ে HTTP স্টেটাস কোড 404 সেট করা হয়েছে।

২. কাস্টম Exception ক্লাস তৈরি করা

ধরা যাক, আপনি একটি কাস্টম exception তৈরি করতে চান, যেমন ResourceNotFoundException:

public class ResourceNotFoundException extends RuntimeException {
    public ResourceNotFoundException(String message) {
        super(message);
    }
}

৩. Controller Example

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    @GetMapping("/users/{id}")
    public String getUser(@PathVariable Long id) {
        if (id == 1L) {
            return "User Found!";
        } else {
            throw new ResourceNotFoundException("User not found with ID: " + id);
        }
    }
}

Output:

  • যখন id 1L হবে, তখন "User Found!" রিটার্ন হবে।
  • অন্য কোনো id দিলে ResourceNotFoundException হ্যান্ডেল হবে এবং "User not found with ID: ..." এর বার্তা দেখাবে।

Logging in Spring Boot

Logging হচ্ছে একটি প্রক্রিয়া, যার মাধ্যমে অ্যাপ্লিকেশনের বিভিন্ন গুরুত্বপূর্ণ তথ্য লগ করা হয়, যেমন ডেটাবেস অপারেশন, ত্রুটি, API কল ইত্যাদি। Spring Boot ডিফল্টভাবে SLF4J (Simple Logging Facade for Java) এবং Logback লাইব্রেরি ব্যবহার করে।

১. Logback কনফিগারেশন (ডিফল্ট লগিং)

Spring Boot-এ application.properties ফাইলের মাধ্যমে লগিং কনফিগার করা হয়। ডিফল্টভাবে Spring Boot Logback ব্যবহার করে, এবং এতে বিভিন্ন লগিং স্তর যেমন DEBUG, INFO, WARN, এবং ERROR সমর্থিত।

application.properties:

# Set log level to INFO
logging.level.org.springframework=INFO
logging.level.com.example=DEBUG

২. লগ স্টেটমেন্ট যুক্ত করা

Spring Boot অ্যাপ্লিকেশনে Logger ক্লাস ব্যবহার করে লগ করা যায়। সাধারণত SLF4J API ব্যবহার করা হয়:

Logger ব্যবহার উদাহরণ:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    private static final Logger logger = LoggerFactory.getLogger(UserController.class);

    @GetMapping("/logtest")
    public String logTest() {
        logger.info("Info level log");
        logger.debug("Debug level log");
        logger.error("Error level log");
        return "Logging Example";
    }
}

৩. বিভিন্ন লগ স্তরের ব্যবহার

  • INFO: সাধারণ কার্যক্রম বা স্টেটাস সম্পর্কে তথ্য দেয়।
  • DEBUG: ডেভেলপারদের জন্য ডিবাগ তথ্য দেয়।
  • ERROR: কোনো ত্রুটি বা ব্যতিক্রম ঘটে তখন এই স্তরের লগ ব্যবহৃত হয়।

লগ ইনফরমেশন:

  • logger.info("Info level log"); : অ্যাপ্লিকেশন চলার সময় সাধারণ কার্যক্রমের তথ্য লগ করবে।
  • logger.debug("Debug level log"); : ডেভেলপারদের জন্য বিস্তারিত তথ্য, যেমন ভেরিয়েবল মান বা স্টেটমেন্টের অবস্থান।
  • logger.error("Error level log"); : যখন কোনো ত্রুটি ঘটে, তখন লগ হবে।

Exception Handling এবং Logging একত্রে ব্যবহার

এখন ধরা যাক, আমরা একটি কন্ট্রোলারে Exception Handling এবং Logging একত্রে ব্যবহার করব। যখন কোনো ত্রুটি ঘটে, তখন আমরা লগে ত্রুটির বিস্তারিত তথ্যও রাখব।

উদাহরণ:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    private static final Logger logger = LoggerFactory.getLogger(UserController.class);

    @GetMapping("/users/{id}")
    public String getUser(Long id) {
        if (id == null) {
            throw new IllegalArgumentException("User ID cannot be null");
        }
        return "User Found!";
    }

    @ExceptionHandler(IllegalArgumentException.class)
    public String handleIllegalArgumentException(IllegalArgumentException ex) {
        logger.error("Exception occurred: {}", ex.getMessage());
        return "Invalid input: " + ex.getMessage();
    }
}

ব্যাখ্যা:

  • যখন getUser() মেথডে id null হবে, তখন IllegalArgumentException হবে।
  • @ExceptionHandler ব্যবহার করে এই exception-টি হ্যান্ডেল করা হচ্ছে এবং লগে ত্রুটির বার্তা রাখা হচ্ছে।

সারাংশ

Spring Boot-এ Exception Handling এবং Logging ব্যবহারের মাধ্যমে অ্যাপ্লিকেশন ডেভেলপমেন্টে ডিবাগিং, ট্রাবলশুটিং এবং ট্র্যাকিং আরও সহজ হয়। @ExceptionHandler এবং @ControllerAdvice দিয়ে কাস্টম exception হ্যান্ডলিং করা যায়, এবং SLF4J ব্যবহার করে সহজেই অ্যাপ্লিকেশনের লগিং পরিচালনা করা সম্ভব। এই দুটি ফিচার মিলে অ্যাপ্লিকেশনকে আরও স্থিতিশীল এবং রক্ষণাবেক্ষণের উপযোগী করে তোলে।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...